// 统一请求管理文件

// 检测当前平台类型
const platform = uni.getSystemInfoSync().platform || '';

const baseUrl = 'http://127.0.0.1:85/uniapp-backend';



// 创建请求实例
const http = {
  // GET请求
  get(url, params = {}, headers = {}) {
    return this.request('GET', url, params, headers);
  },
  
  // POST请求
  post(url, params = {}, headers = {}) {
    return this.request('POST', url, params, headers);
  },
  
  // 统一请求方法
  async request(method, url, params = {}, headers = {}) {
    // 显示加载动画
    uni.showLoading({
      title: '加载中...',
      mask: true
    });
    
    try {
      // 构建完整的请求URL
      const fullUrl = baseUrl + url;
      
      // 默认请求头
      const defaultHeaders = {
        'content-type': 'application/json',
        // 可以在这里添加token等认证信息
        'Authorization': uni.getStorageSync('token') || ''
      };
      
      // 合并请求头
      const requestHeaders = { ...defaultHeaders, ...headers };
      
      // 构建请求参数
      const requestOptions = {
        url: fullUrl,
        method: method,
        header: requestHeaders,
        timeout: 60000 // 60秒超时时间，适合移动网络环境
      };
      
      // 根据请求方法设置数据
      if (method === 'GET') {
        requestOptions.data = params;
      } else {
        // POST等其他方法根据content-type处理参数
        if (requestHeaders['content-type'] === 'application/x-www-form-urlencoded') {
          // 转换为form data格式
          const formData = Object.keys(params).map(key => 
            `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`
          ).join('&');
          requestOptions.data = formData;
        } else {
          requestOptions.data = params;
        }
      }
      
      // 发送请求
      const response = await uni.request(requestOptions);
      
      // 隐藏加载动画
      uni.hideLoading();
      
      // 处理响应结果 - 兼容不同格式的响应
      let err = null;
      let res = null;
      
      // 检查response是否为数组格式（微信小程序旧版格式）
      if (Array.isArray(response)) {
        [err, res] = response;
      } else {
        // 直接使用response对象（新版格式或其他环境）
        // 注意："request:ok"是成功标志，不是错误
        err = (response.errMsg && response.errMsg !== 'request:ok') ? { errMsg: response.errMsg } : null;
        res = response;
      }
      
      if (err) {
        throw new Error(err.errMsg || '网络请求失败');
      }
      
      // 这里可以统一处理响应状态码
      const statusCode = res.statusCode;
      
      if (statusCode === 200) {
        // 请求成功，返回数据
        return res.data;
      } else if (statusCode === 401) {
        // 未授权，跳转到登录页
        uni.removeStorageSync('token');
        uni.removeStorageSync('userInfo');
        uni.navigateTo({
          url: '/pages/login/login'
        });
        throw new Error('未授权，请重新登录');
      } else {
        // 其他错误状态码
        throw new Error(`请求失败：${res.statusCode}`);
      }
    } catch (error) {
      // 隐藏加载动画
      uni.hideLoading();
      
      // 统一错误提示
      uni.showToast({
        title: error.message || '请求失败',
        icon: 'none',
        duration: 2000
      });
      
      // 抛出错误，让调用方可以处理
      throw error;
    }
  }
};

export default http;